﻿var timOut = 0;
var ws = "";
var m_isConnectWS = false;
var m_splitTag = "$*$";
var m_closed = false; //是否被关闭了
//开启webSocket
function StartWebSocket() {
  var url = "ws://localhost:47903/";
  if ('WebSocket' in window) {
    ws = new WebSocket(url);
  } else if ('MozWebSocket' in window) {
    ws = new MozWebSocket(url);
  }
  ws.onopen = function () {
    ws.binaryType = "arraybuffer";
    m_isConnectWS = true;
    m_closed = false;
    console.log("读卡服务已连接")
    DCSDT_OpenAB('1001', '115200')

  };
  var g_strmsg = "";
  var g_funname;
  var g_iRet;
  ws.onmessage = function (evt) {
    if (typeof (evt.data) == "string") {
      var str = "";
      str = evt.data;
      if (str.length <= 0) {
        return;
      }
      if (str.indexOf("longdata") >= 0) {
        var strs = new Array();
        strs = str.split(m_splitTag); //分割出参
        g_funname = strs[1];
        g_strmsg = g_strmsg + strs[2];
        g_iRet = strs[3];
      } else if (str.indexOf("over") >= 0) {
        var longstr = g_funname + m_splitTag + g_strmsg + m_splitTag + g_iRet;
        handleEveryMessage(longstr);
        g_strmsg = "";
      } else {
        // console.log("kilon读卡器返回信息2:",str);
        handleEveryMessage(str);
      }
    }
  };
  ws.onclose = function () {
    m_isConnectWS = false;
    clearInterval(timOut);
    console.log("读卡服务连接失败");
  };

}

function sendWsMessage(msg) {
  ws.send(msg);
}

function load() {
  StartWebSocket();
}

var ishowup;
var hidden, visibilityChange;
if (typeof document.hidden !== "undefined") {
  hidden = "hidden";
  visibilityChange = "visibilitychange";
} else if (typeof document.msHidden !== "undefined") {
  hidden = "msHidden";
  visibilityChange = "msvisibilitychange";
} else if (typeof document.webkitHidden !== "undefined") {
  hidden = "webkitHidden";
  visibilityChange = "webkitvisibilitychange";
}
;

function handleVisibilityChange() {
  if (document[hidden]) {
    ishowup = 1;
  } else {
    ishowup = 0;
  }
} // 判断浏览器的支持情况
if (typeof document.addEventListener === "undefined" || typeof document[hidden] === "undefined") {
  console.log("当前使用的浏览器不支持读卡服务建议改用chrome");
} else { // 监听visibilityChange事件
  document.addEventListener(visibilityChange, handleVisibilityChange, false);
}
window.onblur = function () {
  ishowup = 1;
};
window.onclick = function () {
  ishowup = 0;
};

function DCSDT_OpenAB(port, baud) {
  sendWsMessage("DCSDT_Open" + m_splitTag + port + m_splitTag + baud);
};

function DCSDT_SearchIdCardAB(handle) {
  sendWsMessage("DCSDT_SearchIdCard" + m_splitTag + handle);
};

function DCSDT_IdCardContentAB(handle, flag) {
  sendWsMessage("DCSDT_IdCardContent" + m_splitTag + handle + m_splitTag + flag);
};

function DCSDT_GetIdCardTypeAB(handle) {
  sendWsMessage("DCSDT_GetIdCardType" + m_splitTag + handle);
};

//////////////////////////////////////////
function handleEveryMessage(str) {
  if (str.indexOf("DCSDT_Open") >= 0
    || str.indexOf("DCSDT_Close") >= 0
    || str.indexOf("DCSDT_GetSamSerialNumber") >= 0
    || str.indexOf("DCSDT_SearchIdCard") >= 0
    || str.indexOf("DCSDT_IdCardRead") >= 0
    || str.indexOf("DCSDT_IdCardContent") >= 0
    || str.indexOf("DCSDT_PhotoToBmpFile") >= 0
    || str.indexOf("DCSDT_PhotoToJpgFile") >= 0
    || str.indexOf("DCSDT_PhotoToBmpBase64") >= 0
    || str.indexOf("DCSDT_PhotoToJpgBase64") >= 0
    || str.indexOf("DCSDT_GetIdCardType") >= 0
    || str.indexOf("DCSDT_IdCardContentForForeigner") >= 0
    || str.indexOf("DCSDT_IdCardContentForHkMoTw") >= 0
    || str.indexOf("DCSDT_ParseOtherInfo") >= 0
    || str.indexOf("DCSDT_IdCardImageBuild") >= 0
  ) {
    var strs = new Array();
    strs = str.split(m_splitTag); //分割出参
    showmessage(strs);
    return;
  } else {
    return;
  }

};


function showmessage(msg) {
  if (msg[0] == "DCSDT_Open") {
    if (msg[2] > 0) {
      hwnd = msg[2];
    } else alert("打开设备失败");
  } else if (msg[0] == "DCSDT_Close") {
    if (msg[2] == 0) {
    } else {
      alert("关闭设备失败");
    }
  } else if (msg[0] == "DCSDT_SearchIdCard") {
    if (msg[2] == 0) {
      // console.log("有卡");
      window.isHaveCard(true)
    } else {
      alert("未检测到卡片,请放入卡片");
      window.isHaveCard(false)
    }
  } else if (msg[0] == "DCSDT_GetSamSerialNumber") {
    if (msg[2] == 0) {
      // document.getElementById("txtRsp").value = msg[1];
    } else alert("读取模块编号失败");
  } else if (msg[0] == "DCSDT_GetIdCardType") {
    if (msg[2] == 0) {
    } else if (msg[2] == 1) {
    } else if (msg[2] == 2) {
    }
  } else if (msg[0] == "DCSDT_IdCardRead") {
    if (msg[2] == 0) {
    } else alert("读卡失败");
  } else if (msg[0] == "DCSDT_IdCardContent") {
    dataaa = {"code": 400,}
    if (msg[2] == 0) {
      var strs = new Array();
      strs = msg[1].split("|"); //分割出参
      dataaa = {
        "code": 200,
        "xm": strs[0],//姓名
        "xb": strs[1],//性别
        "mz": strs[2],//民族
        "csrq": strs[3],//出生日期
        "zz": strs[4],//住址
        "sfzh": strs[5],//身份证号
        "qfjg": strs[6],//签发机关
        "fkrq": strs[7],//发卡日期
        "yxrq": strs[8],//有效日期
        "zp": strs[9],//照片BASE64
        "qfcs": strs[10],
      },
        window.duka(dataaa)
      return;
    } else alert("读卡失败");
  } else if (msg[0] == "DCSDT_IdCardContentForForeigner") {
    if (msg[2] == 0) {
      var strs = new Array();
      strs = msg[1].split("|"); //分割出参
      var file = "";
    } else alert("读卡失败");
  } else if (msg[0] == "DCSDT_IdCardContentForHkMoTw") {
    document.getElementById("zp").src = "";
    if (msg[2] == 0) {
      var strs = new Array();
      strs = msg[1].split("|"); //分割出参
      var file = "";
    } else
      alert("读卡失败");
  } else if (msg[0] == "DCSDT_PhotoToBmpFile") {
    if (msg[2] == 0)
      console.log("转BMP文件成功");
    else
      alert("转BMP文件失败");
  } else if (msg[0] == "DCSDT_PhotoToJpgFile") {
    if (msg[2] == 0)
      console.log("转Jpg文件成功");
    else
      alert("转Jpg文件失败");
  } else if (msg[0] == "DCSDT_PhotoToBmpBase64") {
    if (msg[2] == 0)
      console.log("转Bmp格式数据流成功");
    else
      alert("转Bmp格式数据流失败");
  } else if (msg[0] == "DCSDT_PhotoToJpgBase64") {
    if (msg[2] == 0)
      console.log("转Jpg格式数据流成功");
    else
      alert("转Jpg格式数据流失败");
  } else if (msg[0] == "DCSDT_ParseOtherInfo") {
    if (msg[2] == 0)
      console.log("解析信息成功");
    else
      alert("解析信息失败");
  } else if (msg[0] == "DCSDT_IdCardImageBuild") {
    if (msg[2] == 0)
      console.log("生成身份证正面和背面图像成功");
    else
      alert("生成身份证正面和背面图像失败");
  } else {
    return;
  }
};

module.exports = {
  StartWebSocket,
  DCSDT_SearchIdCardAB,
  DCSDT_IdCardContentAB,
  DCSDT_GetIdCardTypeAB,
}
